package com.tyros.common.secure.password;

/**
 * copy from spring security
 *
 * @author zsy
 */
public interface PasswordEncoder {

    /**
     * 导出密钥
     *
     * @param rawPassword 主密钥
     * @return 编码后的密码
     */
    String encode(String rawPassword);


    /**
     * 导出密钥
     *
     * @param rawPassword 主密钥
     * @param salt        盐值
     * @return 编码后的密码
     */
    String encode(String rawPassword, byte[] salt);

    /**
     * 密钥比对
     *
     * @param rawPassword     原始密钥
     * @param encodedPassword 编码后的密钥
     * @return 比对结果
     */
    boolean matches(String rawPassword, String encodedPassword);

    /**
     * 密钥版本比对
     *
     * @param encodedPassword 编码后的密钥
     * @return 是否为低版本
     */
    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }


    /**
     * 密文拆分为头信息和负载信息
     *
     * @param cipherText 密文
     * @return arrays[0]=密文头信息，含算法版本、迭代次数及随机值；arrays[1]=密文负载信息
     * @date 2022/3/22 10:27
     */
    String[] split(String cipherText);


    /**
     * 合并密文
     *
     * @param cipherHeader  密文头
     * @param cipherPayload 密文负载
     * @return 原始密文
     * @author zsy
     * @date 2022/3/22 10:29
     */
    String merge(String cipherHeader, String cipherPayload);
}

